package com.ccc.scala.base5_function

object Function4_ {
  def main(args: Array[String]): Unit = {
    // 函数至简原则
    // 为了开发人员能够大幅度提高开发效率。
    // 通过编译器的动态判定功能，将函数声明中能简化的地方全部都进行了简化
    // 简单来说就是：能省则省

    // 1. return关键字可以省略
    // 函数会将满足条件的最后一行代码的执行结果作为函数的返回值
    def test1(): String = {
      "cj"
    }
    // 调用
    println(test1()) // cj

    // 2. 如果函数返回数据，那么可以推断出返回值类型的话，返回值类型可以省略
    def test2() = {
      "jc"
    }
    // 调用
    println(test2()) // cj

    // 3. 如果函数体的代码只有一行，大括号可以省略
    def test3() = "CJ"
    // 调用
    println(test3())

    // 4. 如果函数的参数列表中没有声明任何的参数，那么参数列表可以省略
    def test4 = "JC"
    // println(test4()) // ERROR
    // 当省略参数列表的声明时，调用这个函数不能增加小括号
    println(test4) // JC

    // 5. 如果函数声明为：Unit，那么函数体中的return关键字不会返回
    def test5(): Unit = {
      return "CJJ"
    }
    // 调用
    println(test5()) // ()

    //    def test5_2() ={ // ERROR
    //      return "CCJ"
    //    }
    // 如果函数体中使用return返回结果，那么一定要声明返回值类型
    def test5_2(): String = {
      return "CCJ"
    }

    // 6. 关键字def和函数名也可以省略
    // 即 匿名函数
    // 省略的同时，也要将返回值类型同时省略，将等号增加一个箭头
    // 匿名函数不能独立使用
    val f: () => String = () => {
      "CJ"
    }
    println(f()) // CJ

  }
}
